﻿using System;
using System.Collections.Generic;
using System.Data;
using Entersoft.Data.DotNetDAL.SQL;

namespace BLL
{
    public class Configuracion : Common
    {
        // private const int CONST_RUTA_TOMAS = 1;
        // private const int CONST_RUTA_TOMAS_BKP = 2;
        // private const int CONST_RUTA_SAP_INICIAL = 3;
        // private const int CONST_RUTA_SAP_INICIAL_BKP = 4;
        // private const int CONST_RUTA_SAP_AJUSTE = 5;
        // private const int CONST_RUTA_SAP_AJUSTE_BKP = 6;
        // private const int CONST_TOPAS_UBICACION_VACIA = 7;
        private const int CONST_SERVIDOR_MSSRS = 8;
        private const int CONST_CARPETA_MSSRS = 9;
        private const int CONST_ARCHIVO_MAESTRO_SAP = 10;

        private string mArchivoMaestroSAP;
        private string mServidorMSSRS;
        private string mCarpetaMSSRS;
        private readonly IList<Config> mListaConfig; 

        public Configuracion ()
        {
            mListaConfig = ObtenerConfiguraciones(ref mMensaje);
        }

        public static IList<Config> ObtenerConfiguraciones(ref string Mensaje)
        {
            var retorno = new List<Config>();

            var objRP = new Entersoft.Data.DotNetResponse.SQL.Persistence {StoredProcedure = "SP_GET_CONFIG"};

            using (var objConn = new Persistence(false, ConnDB))
            {
                objConn.ExecuteDataTable(ref objRP);

                if (!objRP.TieneErrores)
                    if (objRP.DataTable != null)
                    {
                        foreach (DataRow row in objRP.DataTable.Rows)
                        {
                            var newConfig = new Config
                                                {
                                                    Clave = Convert.ToInt16(row["Clave"].ToString()),
                                                    Nombre = row["Nombre"].ToString(),
                                                    Valor = row["Valor"].ToString()
                                                };

                            retorno.Add(newConfig);
                        }
                        
                    }
                    else
                        Mensaje = "Sin Información";
                else
                    Mensaje = objRP.Errores;
            }

            return retorno;
        }

        /// <summary>
        /// Esta propiedad rescata el formato del nombre del 
        /// archivo maestro de SAP para la aplicación
        /// </summary>
        public string ArchivoMaestroSAP
        {
            get
            {
                if (string.IsNullOrEmpty(mArchivoMaestroSAP))
                    mArchivoMaestroSAP = Find(CONST_ARCHIVO_MAESTRO_SAP, mListaConfig);

                return mArchivoMaestroSAP;
            }
        }

        public string ServidorMSSRS
        {
            get
            {
                if (string.IsNullOrEmpty(mServidorMSSRS))
                    mServidorMSSRS = Find(CONST_SERVIDOR_MSSRS, mListaConfig);

                return mServidorMSSRS;
            }
        }

        public string CarpetaMSSRS
        {
            get
            {
                if (string.IsNullOrEmpty(mCarpetaMSSRS))
                    mCarpetaMSSRS = Find(CONST_CARPETA_MSSRS, mListaConfig);

                return mCarpetaMSSRS;
            }
        }

        private static string Find(int Clave, IEnumerable<Config> Lista)
        {
            var retorno = "";

            if (Lista != null)
            {
                foreach (var objConfig in Lista)
                {
                    if (!objConfig.Clave.Equals(Clave)) continue;

                    retorno = objConfig.Valor;
                    break;
                }
            }

            return retorno;
        }
    }

    [Serializable]
    public class Config: Common
    {
        public Config()
        {
            
        }
        
        public bool Grabar()
        {
            var retorno = false;

            var objRP = new Entersoft.Data.DotNetResponse.SQL.Persistence { StoredProcedure = "SP_INS_CONFIG" };

            using (var objConn = new Persistence(true, ConnDB))
            {
                if (Clave == -999)
                    Clave = null;

                objRP.AddParametro(Clave);
                objRP.AddParametro(Nombre);
                objRP.AddParametro(Valor);

                objConn.ExecuteDataTable(ref objRP);

                if (!objRP.TieneErrores)
                    if (objRP.DataTable != null)
                    {
                        retorno = objRP.DataTable.Rows[0][0].Equals(0);
                        mMensaje = objRP.DataTable.Rows[0][1].ToString();
                    }
                    else
                        mMensaje = "Sin Información";
                else
                    mMensaje = objRP.Errores;

                if (retorno)
                    objConn.Commit();
            }

            objRP.Dispose();

            return retorno;
        }

        public Config (int? Clave, string Nombre, string Valor)
        {
            this.Clave = Clave;
            this.Nombre = Nombre;
            this.Valor = Valor;
        }

        public int? Clave { get; set; }
        public string Nombre { get; set; }
        public string Valor { get; set; }
    }
}
